package hn.cch.example.other;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.stream.Collectors;

/**
 * 集合操作：遍历中添加和删除元素
 */
public class CollectionOperate {

    public static void main(String[] args) {


        // listIterator();

        concurrentType();
    }

    /**
     * 特殊的数据类型：列表迭代器ListIterator，其他集合类似都没有
     */
    public static void listIterator() {

        List<String> stringList = new ArrayList<String>();
        stringList.add("hello");
        stringList.add("world");

        System.out.println("list size before ： " + stringList.size());

        ListIterator<String> stringListIterator = stringList.listIterator();
        while (stringListIterator.hasNext()) {
            String string = stringListIterator.next();
            System.out.println("string： " + string);
            if (string.equals("hello")) {
                // stringList.remove(string);
                // 还是要使用迭代器的删除函数
                stringListIterator.remove();
                // 只有列表迭代器ListIterator才能遍历过程中添加元素
                stringListIterator.add("index");
            }
        }

        System.out.println("list size after ： " + stringList.size());
        System.out.println(stringList);

    }


    /**
     * java.util.concurrent.concurrent包下线程安全的集合数据类型，支持
     */
    public static void concurrentType() {


        // ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();
        CopyOnWriteArraySet<String> set = new CopyOnWriteArraySet<>();
        // CopyOnWriteArrayList
        // ConcurrentLinkedQueue


        set.add("qwer");
        set.add("asdf");

        System.out.println("before set.size()" + set.size());
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            String string = iterator.next();
            if ("qwer".equals(string)) {
                // iterator.remove();
                //注意这里不能使用迭代器的删除函数，只能使用集合的删除函数
                //否则会报java.lang.UnsupportedOperationException异常
                set.remove(string);
                set.add("zxcv");
                set.add("poiu");
            }

        }
        System.out.println("after set.size()=" + set.size());
    }

    public static void test() {
        List<String> stringList = Collections.singletonList("asdf");
        List<String> list = Arrays.asList("asdf", "qwer");

    }
}
